import {crmSceneIndexAPI, filedGetFieldAPI, filedGetTableFieldAPI} from "@/api/crm/common.js";
import crmTypeModel from "@/views/crm/model/crmTypeModel.js";
import {crmCustomerIndexAPI, crmCustomerReadAPI} from "@/api/crm/customer.js";


export function useFieldAndListAndDataHook() {

    /**
     * 表格用
     * 获取字段的信息
     */
    async function getFieldList(crmType) {
        let columnList = []
        // 如果fieldList没有数据或者force为空，就强制请求数据
        const params = {}
        params.label = crmTypeModel[crmType]

        await filedGetTableFieldAPI(params).then(res => {
            const fieldListTmp = []
            // 第一个列显示商机信息
            fieldListTmp.push({
                prop: "businessCheck",
                formType: null,
                label: "商机",
                width: "45",
                sortId: null,
            })
            for (let index = 0; index < res.data.data.length; index++) {
                const element = res.data.data[index]
                let width = 0
                // 不显示创建时间和更新时间
                if (['createTime', 'updateTime'].includes(element.fieldName)) {
                    continue
                }
                // 如果没有设置宽度，计算后设置宽度。否则取返回的宽度值
                if (!element.width) {
                    if (element.name && element.name.length <= 6) {
                        width = element.name.length * 15 + 45
                    } else {
                        width = 140
                    }
                } else {
                    width = element.width
                }

                fieldListTmp.push({
                    prop: element.fieldName,
                    formType: element.formType,
                    label: element.name,
                    width: width,
                    sortId: element.id,
                })
            }

            columnList = fieldListTmp
            console.log("test3 fieldListTmp", fieldListTmp)
            console.log("test3", columnList)
        }).catch((error) => {
            console.log("获取字段信息错误", error)
        })

        return columnList;


    }

    /**
     * 表格用
     * 获取列表数据
     */
// 这个函数中props的几个变量没有处理
// 用在vue中的activated函数中，和在mounted中调用
    async function getList(crmType, page, search = {}) {
        let dataList = []
        let params = {
            page: page.currentPage,
            limit: page.pageSize,
            // search: crmOption.search,
            type: crmTypeModel[crmType] // 9是公海
        }
        // if (tableHeadOption.sortData.order) {
        //   params.sortField = tableHeadOption.sortData.prop
        //   params.order = tableHeadOption.sortData.order == 'ascending' ? 2 : 1
        // }
        // if (tableHeadOption.sceneId) {
        //   params.sceneId = tableHeadOption.sceneId
        // }
        // if (tableHeadOption.filterObj && tableHeadOption.filterObj.length > 0) {
        //   params.searchList = tableHeadOption.filterObj
        // }

        // 筛选props传入参数
        // 用于相关查询 包含Id的参数 需替换为下划线 通过类似高级筛选形式 实现
        await crmCustomerIndexAPI(params).then(res => {
            dataList = res.data.data.list.map(element => {
                element.show = false; // 控制列表商机展示

                element.businessCheck = 'a'
                return element;
            })
        }).catch((error) => {
            console.log("获取列表信息错误", error)
        })
        return dataList;

    }

    /**
     * 详情
     */
    async function getDetail(id) {
        let detail = {}
        await crmCustomerReadAPI({customerId: id}).then((result) => {
            detail = result.data.data
        })
        return detail
    }

    async function getSceneList(crmType) {
        let sceneData = {}
        await crmSceneIndexAPI({type: crmTypeModel[crmType]}).then(result => {
            sceneData = result.data.data || []
        })
        return sceneData

    }

    /**
     * 创建和编辑使用
     * 获取创建和编辑表格搜需要的字段和规则
     * @param crmType
     * @returns {{getFieldList: (function(*): Promise<*[]>), getList: (function(*, *, {}=): Promise<*[]>), getDetail: (function(*): Promise<{}>), getSceneList: (function(*): Promise<{}>)}}
     */
    // function getField(crmType, ignoreFields) {
    //     const params = {
    //         label: crmTypeModel.customer
    //     }
    //
    //     if (properties.action.type == 'update') {
    //         params.id = properties.action.id
    //     }
    //
    //     filedGetFieldAPI(params).then(res => {
    //         const list = res.data.data || []
    //         const assistIds = hookCustomFields.getFormAssistIds(list)
    //
    //         const baseFields = []
    //         const fieldList = []
    //         const fieldRules = {}
    //         const fieldForm = {}
    //         list.forEach(children => {
    //             const fields = []
    //             children.forEach(item => {
    //                 const temp = hookCustomFields.getFormItemDefaultProperty(item)
    //                 temp.show = !assistIds.includes(item.formAssistId)
    //
    //                 if (optionData.ignoreFields.includes(temp.field)) {
    //                     // 防止影响普通单选的验证方式
    //                     delete temp.optionsData
    //                     delete item.optionsData
    //                 }
    //
    //                 const canEdit = hookCustomFields.getItemIsCanEdit(item, properties.action.type)
    //                 // 是否能编辑权限
    //                 if (temp.show && canEdit) {
    //                     fieldRules[temp.field] = hookCustomFields.getRules(item)
    //                 }
    //
    //                 // 是否可编辑
    //                 temp.disabled = !canEdit
    //
    //                 // 特殊字段允许多选
    //                 hookCustomFields.getItemRadio(item, temp)
    //
    //                 // 获取默认值
    //                 if (temp.show) {
    //                     if (optionData.ignoreFields.includes(temp.field)) {
    //                         fieldForm[temp.field] = properties.action.type === 'update' ? temp.value : temp.defaultValue
    //                     } else {
    //                         fieldForm[temp.field] = hookCustomFields.getItemValue(item, properties.action.data, properties.action.type)
    //                     }
    //                 }
    //                 fields.push(temp)
    //                 baseFields.push(item)
    //             })
    //             fieldList.push(fields)
    //         })
    //
    //         optionData.baseFields = baseFields
    //         optionData.fieldList = fieldList
    //         optionData.fieldForm = fieldForm
    //         optionData.fieldRules = fieldRules
    //     }).catch((error) => {
    //         console.log("数据获取错误", error)
    //     })

        return {
            getFieldList, getList, getDetail, getSceneList

        }
    }